package sort;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * @author dx
 * @version 1.0
 * @date 2022/3/24 10:21
 * @description:
 * 给定两个数组nums1和nums2，返回它们的交集，输出结果中的
 * 每个元素一定是唯一的，不考虑输出结果的顺序
 */
public class Jiaoji {

    public static void main(String[]args){
        int test1[] = {1,2,2,3,4,5};
        int test2[] = {1,2,5};
        int result[] = new int[test1.length];
        result = intersection(test1,test2);
        for(int i =0;i<result.length;i++){
            System.out.println(result[i]);
        }

    }
//首先使用两个集合分别存储两个数组中的元素，然后遍历较小的集合，
// 判断其中的每个元素是否在另一个集合中，如果元素也在另一个集合中，则将改元素添加到返回值
public static int[] intersection(int[] nums1, int[] nums2){
    Set<Integer> set1 = new HashSet<Integer>();
    Set<Integer> set2 = new HashSet<Integer>();
    for(int num : nums1) {
        set1.add(num);
    }
    for(int num : nums2){
        set2.add(num);

    }
    return getInrsectionSet(set1,set2);

}
    public static int[] getInrsectionSet(Set<Integer> set1,Set<Integer>set2){
        if(set1.size()>set2.size()){
            return getInrsectionSet(set2,set1);
        }

        Set<Integer> intersectionSet = new HashSet<Integer>();
        for(int num : set1){    //可通过for取Set元素
            if(set2.contains(num)){
                intersectionSet.add(num);        //获得元素交集的Set集合
            }
        }
        int [] intersection = new int[intersectionSet.size()];  //元素交集Set集合放到数组中去
        int index = 0;
        for(int num : intersectionSet){
            intersection[index++] = num;
        }
        return intersection;
    }
}
